package com.ywl.stream;

import com.ywl.entity.Author;
import com.ywl.utils.AuthorFactory;

import java.util.Comparator;
import java.util.List;

/**
 * Stream流中间操作,排序
 *
 * @author 24040
 * @name StreamDemo02
 * @date 2022-08-21 22:02
 */
public class StreamDemo03 {

    public static void main(String[] args) {
        List<Author> authors = AuthorFactory.getAuthors();
//        test01(authors);
//        test02(authors);
        test03(authors);
    }

    /**
     * 中间操作sorted排序
     * 对流中的元素按照年龄进行降序排序，并且要求不能有重复的元素。
     *
     * @param authors
     */
    private static void test01(List<Author> authors) {
        authors.stream()
                .distinct()
                .sorted((x, y) -> y.getAge() - x.getAge())//前面的比较大那么结果就是正的，则不需要交换，小的话就需要交换
                .forEach(author -> System.out.println(author));
    }

    /**
     * 中间操作 limit
     * 对流中的元素按照年龄进行降序排序，
     * 并且要求不能有重复的元素,然后打印其中年龄最大的两个作家的姓名。
     */
    private static void test02(List<Author> authors) {
        authors.stream()
                .distinct()
                .sorted((o1, o2) -> o2.getAge() - o1.getAge())
                .limit(2)
                .forEach(item -> System.out.println(item.getName()));
    }

    /**
     * 中间操作skip
     * 打印除了年龄最大的作家外的其他作家，要求不能有重复元素，并且按照年龄降序排序。
     */
    private static void test03(List<Author> authors) {
        authors.stream()
                .distinct()
                .sorted((o1, o2) -> o2.getAge()-o1.getAge())
                .skip(1)
                .forEach(item-> System.out.println(item.getAge()));
    }
}
